home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / artemis / artsrc2 / gpoint.asm < prev    next >
Assembly Source File  |  1994-06-01  |  2KB  |  179 lines

  1. ;    私製ライブラリ・グラフィック篇
  2. ;    (c) MATSUUCHI Ryosuke in Dec,1992
  3. ;
  4. ;    gpoint.asm
  5. ;
  6. ;    1992. 8. 3(Mon)
  7. ;    1992.12.28(Sun)
  8.  
  9.  
  10.         public    gpoint,_gpoint
  11.         extrn    __AddVramBase_edi    :near
  12.         extrn    __SetVramSeg        :near
  13.         extrn    __AddVramBase_ebx    :near
  14.         extrn    __AddVramBase_esi    :near
  15.  
  16.         include    grplib.inc
  17.         
  18.         assume    cs:cseg, ds:dseg
  19.  
  20.  
  21.  
  22. dseg segment dword 'DATA'
  23.  
  24. col        dd    0
  25.  
  26. dseg ends
  27.  
  28.  
  29.  
  30. cseg segment dword 'CODE'
  31.  
  32. ;---------------------------------------------------------------
  33. ;    _gpoint : 点の色の読み出し
  34. ;        in  EAX : x
  35. ;            EBX : y
  36. ;        out EAX : 色
  37. ;
  38. ;    int gpoint(int x,int y);
  39. ;---------------------------------------------------------------
  40.  
  41.         align 4
  42.  
  43.  
  44.  
  45. gpoint        proc
  46.         push    ebx
  47.         pushfd
  48.         mov    eax,[esp+8+4]
  49.         mov    ebx,[esp+8+8]
  50.         call    _gpoint
  51.         popfd
  52.         pop    ebx
  53.         ret
  54. gpoint        endp
  55.  
  56.  
  57.  
  58. _gpoint        proc
  59.         pushad
  60.         push    es
  61.         mov    ecx,[_nowscrmod]
  62.         cmp    ecx,3
  63.         jl    #end
  64.         cmp    ecx,5
  65.         jge    #0
  66.         call    gpoint_16
  67.         jmp    #end
  68. #0:        cmp    ecx,9
  69.         jge    #1
  70.         call    gpoint_32a
  71.         jmp    #end
  72. #1:        cmp    ecx,12
  73.         jge    #2
  74.         call    gpoint_32b
  75.         jmp    #end
  76. #2:        cmp    ecx,15
  77.         jge    #3
  78.         call    gpoint_256
  79.         jmp    #end
  80. #3:        cmp    ecx,19
  81.         jge    #end
  82.         call    gpoint_32c
  83. #end:        pop    es
  84.         popad
  85.         mov    eax,[col]
  86.         ret
  87. _gpoint        endp
  88.  
  89.  
  90.  
  91. pageadr        macro
  92.         call    __AddVramBase_edi
  93.         endm
  94.  
  95.  
  96.  
  97. gpoint_16    proc
  98.     ;edi ← アドレス
  99.         mov    esi,eax
  100.         and    esi,0fff8h
  101.         shr    esi,1
  102.         mov    edi,ebx
  103.         shl    edi,9
  104.         add    edi,esi
  105.         pageadr
  106.     ;点の色の読み出し
  107.         call    __SetVramSeg
  108.         mov    edx,es:[edi]    ;edx ← DW データ
  109.         mov    ecx,eax        ;ecx ← (x % 8) * 4
  110.         and    ecx,7
  111.         lea    ecx,[ecx*4]
  112.         shr    edx,cl        ;edx のうち必要なニブルを取り出す
  113.         and    edx,0fh
  114.         mov    [col],edx
  115.         ret
  116. gpoint_16    endp
  117.  
  118.  
  119.  
  120. gpoint_32a    proc
  121.     ;edi ← アドレス
  122.         mov    edi,ebx
  123.         shl    edi,9
  124.         add    edi,eax
  125.         add    edi,eax
  126.         pageadr
  127.     ;点の色の読み出し
  128.         call    __SetVramSeg
  129.         mov    dx,es:[edi]
  130.         and    edx,7fffh
  131.         mov    [col],edx
  132.         ret
  133. gpoint_32a    endp
  134.  
  135.  
  136.  
  137. gpoint_32b    proc
  138.     ;edi ← アドレス
  139.         mov    edi,ebx
  140.         shl    edi,10
  141.         add    edi,eax
  142.         add    edi,eax
  143.         pageadr
  144.     ;点の色の読み出し
  145.         call    __SetVramSeg
  146.         mov    dx,es:[edi]
  147.         and    edx,7fffh
  148.         mov    [col],edx
  149.         ret
  150. gpoint_32b    endp
  151.  
  152.  
  153. gpoint_256    proc
  154. ;★まだ作ってないよん
  155.         ret
  156. gpoint_256    endp
  157.  
  158.  
  159. gpoint_32c    proc
  160.     ;edi ← アドレス
  161.         mov    edi,ebx
  162.         shl    edi,10
  163.         add    edi,eax
  164.         add    edi,eax
  165.         pageadr
  166.     ;点の色の読み出し
  167.         call    __SetVramSeg
  168.         mov    dx,es:[edi]
  169.         and    edx,7fffh
  170.         mov    [col],edx
  171.         ret
  172. gpoint_32c    endp
  173.  
  174.  
  175.  
  176. cseg ends
  177.  
  178. end
  179.